home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue31 / tablesrc / TABLESRC.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1996-10-05  |  5.5 KB  |  198 lines

  1. unit TableSrc;
  2. interface
  3. uses
  4.   WinTypes, WinProcs, SysUtils, Classes, Dialogs, Forms,
  5.   ExptIntf, VirtIntf, DB, DBTables;
  6.  
  7. Type
  8.   TTableSrcExpert = class(TIExpert)
  9.   public
  10.     { Expert Style }
  11.     function GetStyle: TExpertStyle; override;
  12.     { Expert Strings }
  13.     function GetIDString: String; override;
  14.     function GetName: String; override;
  15.   {$IFDEF WIN32}
  16.     function GetAuthor: String; override;
  17.   {$ENDIF}
  18.     function GetMenuText: String; override;
  19.     function GetState: TExpertState; override;
  20.     { Launch the Expert }
  21.     procedure Execute; override;
  22.   end {TDataSrcExpert};
  23.  
  24. implementation
  25. uses TypInfo;
  26.  
  27.   procedure HandleException;
  28.   begin
  29.     if Assigned(ToolServices) then
  30.       ToolServices.RaiseException(ReleaseException)
  31.   end {HandleException};
  32.  
  33.  
  34.   function TTableSrcExpert.GetStyle: TExpertStyle;
  35.   begin
  36.     try
  37.       Result := esStandard
  38.     except
  39.       HandleException
  40.     end
  41.   end {GetStyle};
  42.  
  43.   function TTableSrcExpert.GetIDString: String;
  44.   begin
  45.     try
  46.       Result := 'DrBob.TableSrcExpert'
  47.     except
  48.       HandleException
  49.     end
  50.   end {GetIDString};
  51.  
  52.   function TTableSrcExpert.GetName: String;
  53.   begin
  54.     try
  55.       Result := 'Table Source Expert';
  56.     except
  57.       HandleException
  58.     end
  59.   end {GetName};
  60.  
  61. {$IFDEF WIN32}
  62.   function TTableSrcExpert.GetAuthor: String;
  63.   begin
  64.     try
  65.       Result := 'Dr.Bob'
  66.     except
  67.       HandleException
  68.     end
  69.   end {GetAuthor};
  70. {$ENDIF}
  71.  
  72.   function TTableSrcExpert.GetMenuText: String;
  73.   begin
  74.     try
  75.       Result := '&Table Source Expert...'
  76.     except
  77.       HandleException
  78.     end
  79.   end {GetMenuText};
  80.  
  81.   function TTableSrcExpert.GetState: TExpertState;
  82.   begin
  83.     try
  84.       Result := [esEnabled]
  85.     except
  86.       HandleException
  87.     end
  88.   end {GetState};
  89.  
  90.  
  91.  
  92.   procedure TTableSrcExpert.Execute;
  93.   var f: System.Text;
  94.       i: Integer;
  95.  
  96.       function OptionNames(IndexOptions: TIndexOptions): String;
  97.       begin
  98.         Result := '[ ';
  99.         if ixPrimary in IndexOptions then
  100.           Result := Result + 'ixPrimary,';
  101.         if ixUnique in IndexOptions then
  102.           Result := Result + 'ixUnique,';
  103.         if ixDescending in IndexOptions then
  104.           Result := Result + 'ixDescending,';
  105.       { if ixNonMaintained in IndexOptions then
  106.           Result := Result + 'ixNonMaintained,'; }
  107.         if ixCaseInsensitive in IndexOptions then
  108.           Result := Result + 'ixCaseInsensitive,';
  109.         Delete(Result,Length(Result),1); { laatste weg }
  110.         Result := Result + ']'
  111.       end {OptionNames};
  112.  
  113.   begin
  114.     try
  115.     { if (ToolServices = nil) then
  116.         raise Exception.Create('ToolServices not available!')
  117.       else }
  118.       with TTable.Create(nil) do
  119.       try
  120.         with TOpenDialog.Create(nil) do
  121.         try
  122.           Title := GetName; { name of Expert as OpenDialog caption }
  123.           Filter := 'DB Files (*.db)|*.db';
  124.           Options := Options + [ofShowHelp, ofPathMustExist, ofFileMustExist];
  125.           if Execute then { not a showmodal! }
  126.           begin
  127.             DatabaseName := ExtractFilePath(FileName);
  128.             TableName := ExtractFileName(FileName)
  129.           end
  130.         finally
  131.           Free
  132.         end;
  133.  
  134.         {generate the first part of the unit source}
  135.         System.Assign(f,ChangeFileExt(TableName,'.PAS'));
  136.         System.Rewrite(f);
  137.         writeln(f,'unit ',ChangeFileExt(TableName,''),';');
  138.         writeln(f,'interface');
  139.         writeln(f);
  140.         writeln(f,'  procedure Create',ChangeFileExt(TableName,''),';');
  141.         writeln(f);
  142.         writeln(f,'implementation');
  143.         writeln(f,'uses DB, DBTables;');
  144.         writeln(f);
  145.         writeln(f,'  procedure Create',ChangeFileExt(TableName,''),';');
  146.         writeln(f,'  begin');
  147.         writeln(f,'    with TTable.Create(nil) do');
  148.         writeln(f,'    try');
  149.         writeln(f,'      Active := False;');
  150.         writeln(f,'      TableType := ttParadox;');
  151.         writeln(f,'      TableName := ''',TableName,''';');
  152.  
  153.         FieldDefs.Update { get info without opening the database };
  154.         writeln(f,'      with FieldDefs do');
  155.         writeln(f,'      begin');
  156.         writeln(f,'        Clear;');
  157.         for i:=0 to Pred(FieldDefs.Count) do
  158.         begin
  159.           writeln(f,' ':8,'Add(''',FieldDefs[i].Name,''', ',
  160.           {$IFDEF Win32}
  161.             GetEnumName(TypeInfo(TFieldType),  Ord(FieldDefs[i].DataType)),
  162.           {$ELSE}
  163.             GetEnumName(TypeInfo(TFieldType),  Ord(FieldDefs[i].DataType))^,
  164.           {$ENDIF}
  165.             ', ',FieldDefs[i].Size,', ',
  166.             FieldDefs[i].Required,');')
  167.         end;
  168.         writeln(f,'      end;');
  169.  
  170.         IndexDefs.Update { get info without opening the database };
  171.         writeln(f,'      with IndexDefs do');
  172.         writeln(f,'      begin');
  173.         writeln(f,'        Clear;');
  174.         for i:=0 to Pred(IndexDefs.Count) do
  175.         begin
  176.           writeln(f,' ':8,'Add(''',IndexDefs[i].Name,''', ''',
  177.                                    IndexDefs[i].Fields,''', ',
  178.                                    OptionNames(IndexDefs[i].Options),');')
  179.         end;
  180.         writeln(f,'      end;');
  181.  
  182.         writeln(f,'      CreateTable');
  183.         writeln(f,'    finally');
  184.         writeln(f,'      Free');
  185.         writeln(f,'    end');
  186.         writeln(f,'  end {Create',ChangeFileExt(TableName,''),'};');
  187.         writeln(f);
  188.         writeln(f,'end.');
  189.         System.Close(f)
  190.       finally
  191.         Free
  192.       end
  193.     except
  194.       HandleException
  195.     end
  196.   end {Execute};
  197. end.
  198.